#include "InfoChatWidget.h"

#include <QDebug>

InfoChatWidget::InfoChatWidget(QPointer<RoComponent> component, QTabWidget *parent, QString name) :
    super(parent),
    parentTabWidget(parent), // Т.к Qt меняет parent на QStackedWidget
    _name(name), // Использется только для info-шек, чтобы отбирать необходимую info-шку.
    _component(component)
{
    this->setupUi(this);

    // Хочу чтобы был зелёненький.
    infoChatTextEdit->setStyleSheet( " QTextEdit { color: green } ");

    setActions();
}

void InfoChatWidget::setActions()
{
    connect ( addInfoAttributeButton, SIGNAL(clicked()),
             this, SLOT(addInfoAttribute()) );
    connect (sendInfoButton, SIGNAL(clicked()),
             this, SLOT(sendInfo()));
}


void InfoChatWidget::addLogText(QString text)
{
    infoChatTextEdit->append(text);
}

// SIGNALS SECTION

void InfoChatWidget::addInfoAttribute()
{
    AttributeWidget* attributeWidget = new AttributeWidget(this);

    QVBoxLayout* internalLayOut = qobject_cast<QVBoxLayout*>(scrollAreaWidgetContents->layout());
    internalLayOut->insertWidget(
                                internalLayOut->count()-1, //Чтобы кнопка "+" была ниже добавленного виджета.
                                attributeWidget);

    connect(attributeWidget->deleteButton, SIGNAL(clicked()),
            this, SLOT(deleteInfoAttribute()));

    attributeWidgets.push_back(attributeWidget);
}

void InfoChatWidget::closeProperly()
{
    parentTabWidget->removeTab(parentTabWidget->indexOf(this));
    close();
    deleteLater();
}

void InfoChatWidget::deleteInfoAttribute()
{
    AttributeWidget* attributeWidget = qobject_cast<AttributeWidget*>(sender()->parent());
    attributeWidgets.removeAt( attributeWidgets.indexOf(attributeWidget) );
    attributeWidget->close();
}

void InfoChatWidget::logInfoText(const RoInfoStanza &stanza)
{
    if (stanza.name() == _name) // Если имя info-шки совпало, то выводим.
    {
        addLogText(stanza.toString());
    }
}

void InfoChatWidget::sendInfo()
{
    RoInfoStanza info = RoInfoStanza( _name );

    info.setAttribute("from", senderLineEdit->text());

    foreach(AttributeWidget* attrWidget, attributeWidgets)
    {
        if( !attrWidget->attrNameEdit->text().isEmpty() &&
            !attrWidget->attrValueEdit->text().isEmpty() )
        {
            info.setBodyAttribute(attrWidget->attrNameEdit->text(),
                              attrWidget->attrValueEdit->text());
        }
    }
    _component->sendStanza(info);
}
